home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / owa-version.nasl < prev    next >
Text File  |  2005-01-14  |  5KB  |  169 lines

  1. #
  2. # (C) Tenable Network Security
  3. #
  4. # See the Nessus Script License for details
  5. #
  6. #
  7.  
  8. if(description)
  9. {
  10.  script_id(14255);
  11.  script_version ("$Revision: 1.4 $");
  12.  
  13.  name["english"] = "Outlook Web Access Version";
  14.  script_name(english:name["english"]);
  15.  
  16.  desc["english"] = "
  17. Microsoft Exchange Server with Outlook Web Access (OWA) embeds the 
  18. Exchange version number inside the default HTML web page.
  19.  
  20. Risk factor : Medium";    
  21.     
  22.  script_description(english:desc["english"]);
  23.  
  24.  summary["english"] = "Outlook Web Access version check";
  25.  script_summary(english:summary["english"]);
  26.  
  27.  script_category(ACT_GATHER_INFO);
  28.  
  29.  
  30.  script_copyright(english:"This script is Copyright (C) 2004 Tenable Network Security");
  31.  family["english"] = "CGI abuses";
  32.  script_family(english:family["english"]);
  33.  script_dependencie("find_service.nes");
  34.  script_require_ports("Services/www", 80);
  35.  exit(0);
  36. }
  37.  
  38. #
  39. # The script code starts here
  40. #
  41.  
  42. include("http_func.inc");
  43. include("http_keepalive.inc");
  44.  
  45. function newloc(ban)
  46. {
  47.     location = egrep(pattern:"^Location:", string:ban);
  48.     if (strstr(ban, "Location: http://"))
  49.     {
  50.             newloc = ereg_replace(pattern:"^Location: http://[^/]*(/.*)$",
  51.                        string:location,
  52.                        replace:"\1");
  53.     }
  54.     else
  55.     {
  56.         newloc = ereg_replace(pattern:"^Location: (/.*)$",
  57.             string:location,
  58.             replace:"\1");
  59.     }    
  60.     return(chomp(newloc));
  61. }
  62.  
  63.  
  64.  
  65. # so, default Microsoft Exchange with OWA embeds version number inside HTML comments like:
  66. # size=2><BR>Microsoft Exchange Server </FONT><FONT color=black size=2>Version 5.5 
  67. #      SP4<BR><!-- 2653.23 -->Microsoft (R) Outlook (TM) Web Access <snip>
  68. #
  69. # go out on google and you'll see that most sites keep at least one of sigs[]
  70. # or text[] 
  71.  
  72. sigs[0] = "1457." ;  xchange[0] = "5.0 SP 0";  text[0] = "Version 5.0 SP0";  vuln[0] = 1;
  73. sigs[1] = "1458." ;  xchange[1] = "5.0 SP 1";  text[1] = "Version 5.0 SP1";  vuln[1] = 1;
  74. sigs[2] = "1460.13"; xchange[2] = "5.0 SP 2";  text[2] = "Version 5.0 SP2";  vuln[2] = 0;
  75. sigs[3] = "1960.4";  xchange[3] = "5.5 SP 0";  text[3] = "Version 5.5 SP0";  vuln[3] = 1;
  76. sigs[4] = "2232.5";  xchange[4] = "5.5 SP 1";  text[4] = "Version 5.5 SP1";  vuln[4] = 1;
  77. sigs[5] = "2448.4";  xchange[5] = "5.5 SP 2";  text[5] = "Version 5.5 SP2";  vuln[5] = 1;
  78. sigs[6] = "2650.24"; xchange[6] = "5.5 SP 3";  text[6] = "Version 5.5 SP3";  vuln[6] = 1;
  79. sigs[7] = "2653.23"; xchange[7] = "5.5 SP 4";  text[7] = "Version 5.5 SP4";  vuln[7] = 0;
  80. sigs[8] = "4417.";   xchange[8] = "2000 SP 0"; text[8] = "Version 2000 SP0"; vuln[8] = 0;
  81.  
  82.  
  83.  
  84. port = get_http_port(default:80);
  85.  
  86. if ( ! can_host_asp(port:port) ) 
  87.     exit(0);
  88.  
  89. cgi = "/exchange/logon.asp";
  90.  
  91. soc = http_open_socket(port);
  92. if ( ! soc ) exit(0);
  93. req = http_get(item:cgi, port:port);
  94. send(socket:soc, data:req);
  95. r = http_recv(socket:soc);
  96. http_close_socket(soc);
  97. if (! egrep(pattern:"^HTTP/1\.[01] (200|302|403)", string:r) )
  98.     exit(0);
  99.  
  100. # permutations that I thought of
  101. # 200 OK -> sigmatch
  102. # 302 redirect -> 200 OK -> sigmatch
  103. # 403 Req SSL -> 200 OK -> sigmatch
  104. # 302 redirect -> 403 Req SSL -> 200 OK -> sigmatch
  105.  
  106.  
  107. if (egrep(pattern:"^HTTP/1\.[01] 302.*", string:r))
  108. {
  109.     goto = newloc(ban:r);
  110.     soc = http_open_socket(port);
  111.     if ( ! soc ) exit(0);
  112.     req = http_get(item:goto, port:port);
  113.     send(socket:soc, data:req);
  114.     r = http_recv(socket:soc);
  115. }
  116.  
  117.  
  118.  
  119. if (egrep(pattern:"HTTP/1\.[0-9] 403 Access Forbidden", string:r))
  120. {
  121.     #display("ROCKING AND ROLLIN AND WHATNOT OVER SSL\n");       
  122.         port = 443;
  123.         soc = open_sock_tcp(port, transport:ENCAPS_SSLv23);
  124.     if ( ! soc ) exit(0);
  125.     req = string("GET ", cgi, " HTTP/1.1\r\nHost: ", get_host_ip(), "\r\n\r\n");
  126.         send(socket:soc, data:req);
  127.         r = http_recv(socket:soc);
  128.     if (egrep(pattern:"^HTTP/1\.[01] 302.*", string:r))
  129.     {
  130.         close(soc);
  131.         goto = newloc(ban:r);
  132.         req = string("GET ", goto, " HTTP/1.1\r\nHost: ", get_host_ip(), "\r\n\r\n");
  133.         soc = open_sock_tcp(port, transport:ENCAPS_SSLv23);
  134.         if ( ! soc ) exit(0);
  135.         send(socket:soc, data:req);
  136.         r = http_recv(socket:soc);
  137.     }
  138.         
  139. }
  140.  
  141.  
  142. if ( ("L_strMailboxPlease_Message" >< r) || ("Outlook (TM) Web Access" >< r) )
  143. {
  144.         for (i=0; sigs[i]; i++)
  145.         {
  146.                 if ( (sigs[i] >< r) || (text[i] >< r) )
  147.                 {
  148.                     myrep = string("The remote host is running Outlook Web Access on Exchange version ", xchange[i], 
  149.             ".\nOWA is a web-based interface to Microsoft Exchange Server and allows remote users",
  150.             "\nto access email, calendar, and folders over the Internet\n");
  151.             
  152.                     if (vuln[i])
  153.                     {
  154.                         myrep += string("\nThe OWA/Exchange Server is missing at least one critical patch\n\n",
  155.                 "Risk Factor: High\n\nSolution: Upgrade to the latest version of OWA ",
  156.                 "from Microsoft\n");
  157.                         security_hole(port:port, data:myrep);
  158.                         exit(0);
  159.                     }
  160.                     else
  161.                     {
  162.                         security_warning(port:port, data:myrep);
  163.                         exit(0);
  164.                     }
  165.                 }
  166.         }
  167. }
  168.  
  169.